let obj = {
    a: 1,
    b: 2
}
console.log(obj);
for (const key in obj) {
    console.log(key)
}
let key = Object.keys(obj)
console.log(key);


//属性描述符getOwnPropertyDescriptor(),两个参数：第一个是对象，第二个是对象里的某一个属性
let desc = Object.getOwnPropertyDescriptor(obj,'a')
console.log(desc);//{ value: 1, writable(可重写): true, enumerable(可遍历): true, configurable(描述符本身可修改): true }

//设置属性描述符defineProperty()，三个参数：第一个是对象，第二个是对象里的某一个属性，第三个是属性描述符
Object.defineProperty(obj,'a',{
    value:10,
    writable:false, //不可重写
    enumerable:false, // 不可遍历
    configurable:false //不可修改属性描述符
}) 
console.log(obj.a);

//get，set
let internalValue = undefined

Object.defineProperty(obj,'b',{
    get:function(){
        return internalValue
    }, //读取器
    set:function(value){
        internalValue = value
    }  //设置器
})

Object.freeze(obj) // 冻结
Object.seal(obj) // 密封
obj.b = 3
console.log(obj);